#version 130

uniform sampler2D Tex1;
uniform sampler2D Tex2; // NORMAL MAPPING

varying vec2 TexCoord;
uniform vec3 AmbientalLightIntensity;
uniform vec3 LightPosition;
uniform vec3 CameraPosition;

uniform mat4 ModelMatrix;
uniform mat4 ViewMatrix;

varying vec3 position;
varying vec3 normal;

uniform float shininess; // Brillosidad del material

varying vec3 tangentSurface2Light;
varying vec3 tangentSurface2View;
varying mat3 bumpingMatrix;
//varying vec3 vectorTangent;

void main() {
	vec3 texColor = vec3(texture2D(Tex1, TexCoord));
	vec3 texColor2 = vec3(texture2D(Tex2, TexCoord));

	float distancia = length(position - LightPosition);	// calculo la distancia entre la luz y el vertice
	float atenuacion = 1.0 / (1.0 + 0.0001 * distancia + 0.00001 * distancia * distancia); // calculo la atenuación por la distancia

	// Calculo Difuso
	//vec3 surf2light = normalize(tangentSurface2Light); // Calculo el vector posicion-luz
	vec3 norm = normalize(bumpingMatrix * (texColor2 * 2.0 - 1.0)); // obtengo la normal del normal map
	vec3 surf2light = normalize(LightPosition - position);
	//norm = normal;
	
	vec3 norm_pos = normalize(surf2light); 		// normalizo la direccion de la luz
	float cos_diffuse = max(0.0, dot(norm, norm_pos));
	vec3 diffuse_light = cos_diffuse * (vec3(1.0f)); // No tengo en cuenta al material ni la luz vec3(1.0f)

	// Calculo especular
	//vec3 surf2view = normalize(tangentSurface2View);
	vec3 surf2view = normalize(CameraPosition - position);
	vec3 reflection = reflect(-surf2light, norm);
	float specular_conttribution = pow(max(0.0f, dot(surf2view, reflection)), shininess);
	vec3 specular_light;
	if (specular_conttribution >= 0.0f) {
		specular_light = specular_conttribution * (vec3(1.0f)); // No tengo en cuenta al material ni la luz (vec3(1.0f)
	}

	gl_FragColor = vec4(texColor * (AmbientalLightIntensity + diffuse_light + specular_light) * atenuacion,
			1.0);
	//gl_FragColor = vec4(vectorTangent,1.0);

}
